package follow.juc.heima.day7.demo;

/* 如果同步函数被静态修饰后，使用的锁是什么呢？
 * 通过验证，发现不在是this。因为静态方法中也不可以定义this
 * 静态进内存是，内存中没有本类对象，但是一定有该类对应的字节码文件对象。
 * 类名.class 该对象的类型是Class
 * 静态的同步方法使用的锁是该方法所在类的字节码文件对象。 类名.class
 * */
public class ThisLockDemo {
    public static void main(String[] args) {
        Ticke t = new Ticke();
        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);
        t1.start();
        try {
            Thread.sleep(10);
        } catch (Exception e) {
        }
        t.flag = false;
        t2.start();
    }
}

class Ticke implements Runnable {
    private static int tick = 100;
    boolean flag = true;

    public void run() {
        if (flag) {
            while (true) {
                synchronized (this) {
                    if (tick > 0) {
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName()
                                + "...code :" + tick--);
                    }
                }
            }
        } else
            while (true)
                show();
    }

    public static synchronized void show() {
        if (tick > 0) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "sale:" + tick--);
        }
    }
}
